package com.rws;


import com.rws.message.LockMessage;

import java.util.Objects;

/**
 * 具体的业务父类，继承他可以实现自己的业务
 * 推送的时候指定名称会转发到此类
 * @Author 谢卓才
 * @Date 2022/10/23 17:20
 */
public abstract class Observer {

    /**
     * 初始化名称和向SubjectLocalContext注册自身
     */
    public Observer(){
        this.name = name();
        SubjectLocalContext.createObserver(this);
    }

    /**
     * 名称：
     * 推送和接受时匹配作用
     */
    protected String name;

    public String getName(){
        return name;
    }

    /**
     * 自定义名称
     * @return
     */
    protected abstract String name();

    /**
     * 接受消息的方法
     * 推送过来的消息通过名称会转发到此方法
     * @param message
     */
    public abstract Object receive(LockMessage message);

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Observer observer = (Observer) o;
        return Objects.equals(name, observer.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}
